我原本把鐵人賽的 Day 1 規劃為「推理模型不是回答比較長的聊天模型」,文章也已經寫好了,直到真的準備開始發文的此刻,才發覺這個開場實在太快了,即使如今 ChatGPT、Gemini、Claude 等服務的用戶人數有數億人,也不該預設讀者理所當然知道大型語言模型 (Large Language Model, LLM) 是什麼、reasoning model 又憑什麼在 LLM 前面多出 reasoning 這個字,所以我決定把後面的進度全部往後挪一天,先回頭處理一個大概已經不需要再提,卻始終沒有那麼容易說清楚的問題:LLM 到底是不是一隻只會預測下一個 token 的隨機鸚鵡?
目前的 LLM 確實在預測下一個 token,電腦不會直接看見我們以為的一個個「字」或「單字」,而是先把文字切成 token,它可能是一個中文字、一小段英文、標點,甚至只是空白,模型讀完前面的 token 後,算出下一個 token 的機率,再從中選出一個,然後把剛選出的結果接回輸入,繼續預測下一個。無論最後生成的是一封電子郵件、一段 Python 程式或一份數學證明,底層都沒有離開這個過程。
可是,說 LLM 只是一個 next-token predictor,雖然正確,卻也像把漫畫說成紙張、油墨和網點的組合;這些當然都是漫畫的一部分,但你不會因此知道角色寫得好不好、分鏡是否流暢,更不會知道讀完後會不會在半夜想起某個場景。生成機制告訴我們文字怎麼被接出來,沒有直接回答模型在大量訓練後學到了哪些結構,也沒有回答它遇到一個不曾看過的問題時,究竟能不能找到可用的解法。這些能力不能從「預測下一個 token」幾個字裡自動推導出來,還是得一項一項實際測試。
「隨機鸚鵡」這個說法來自 2021 年的論文 On the Dangers of Stochastic Parrots,算是前幾年 LLM 剛問世、以及 GPT-o1 preview 這個劃時代的推理架構推出前,很常看到的一種譏諷。但放到現在就失真了,「隨機鸚鵡」不該被當成所有討論的句點,好像說完這四個字,就已經證明模型不可能進行任何有用的推理,那些嘲諷者真的認為某隻隨機鸚鵡,能解決數十年來從未有人解開的數學猜想?假如模型能在沒有看過的數學題或程式問題上,比原本的 Base model 多答對一些題目,那個差異依然需要解釋(當然也得先排除資料洩漏、評分器偏差和偷偷增加運算量的可能)。最後也許會發現它只是記住相似題型,也許真的學會了某些能泛化的解題模式,甚至可能只是在八個答案裡運氣很好地抽中一個;但無論是哪一種,都不能靠鸚鵡的比喻替我們決定,得仔細檢視題目、輸出和評分規則。
Base model、instruction-tuned model 和 reasoning model 這幾個名字看起來像三種不同物種,實際上往往只是同一條訓練路徑上的幾個位置,reasoning model 並沒有脫離 LLM,更沒有突然換上一顆會思考的人腦。Base model 經過預訓練,最熟悉的工作是延續文字;instruction-tuned model 再經過指令資料與偏好對齊,變得比較知道人類問了問題後期待什麼形式的回答;reasoning model 則繼續加入推理導向的後訓練,可能學習多步驟解題軌跡、接受可以程式驗證的獎勵,或在推論時多抽幾個答案、比較候選、批評自己,甚至把計算交給 Python 和其他工具。模型骨架未必有多大改變,訓練目標和使用時願意花掉的運算量,才是差異逐漸出現的地方。
這些方法聽起來都很合理,實際做起來卻不保證有效。多生成八次,也可能只是得到八份不同的錯誤;要求模型反省,它有時會救回原本答錯的題目,有時反而把正確答案改壞;verifier 看似客觀,如果規則寫得不夠嚴謹,模型還可能找到奇怪的漏洞,努力討好評分程式而不是把題目解好,或者可以說是 training on the Benchmark?因此,我不打算在這個系列裡替「模型有沒有真正思考」做哲學批判,讓我們用更實際和直接的工程角度,把 prompt、答案擷取方式、評分規則、資料切分和計算預算固定下來,再看看每一個看起來很有道理的方法,最後到底替我們多答對了幾題,又花掉多少時間和 token。
接下來 29 天我將我選擇 Sebastian Raschka 的《Build a Reasoning Model (From Scratch)》作為主線,這位作者的前一本書《讓 AI 好好說話!從頭打造 LLM (大型語言模型) 實戰秘笈》寫得超棒,旗標出版社有代理進台灣,我不覺得我能從頭寫一份比他更好的教材。書名裡的 From Scratch 很容易讓人誤以為我們要從亂數權重開始預訓練一個大型基礎模型,但 Sebastian 選擇的是一條正常人比較有可能走完的路:從小型 pretrained LLM 開始,自己寫文字生成和數學 verifier,接著實作 inference-time scaling、self-refinement、RLVR/GRPO,最後再把大型模型產生的解題行為蒸餾回小模型。書中大量使用數學題也很合理,倒不是作者認為只有數學需要推理,而是數學答案相對容易交給程式驗證,至少我們不需要每次都憑人類的主觀感覺,判斷模型到底答得好不好。
我計畫會沿著原書的路徑前進,但不會把它翻譯一遍,也不會逐章照抄程式。這次使用的起點是固定版本的 Qwen/Qwen3-0.6B-Base,參數量不算大,在我自己的 RTX 3090 Ti 就有辦法執行,而且是可以很快地完成;我已經確認它可以載入,也實際跑過一次完整的 forward、backward 和 optimizer step,再把 checkpoint 存下來重新載入。這當然不能證明模型已經變好,至少證明後面的內容不會完全停留在「如果有足夠的 GPU,理論上應該可以訓練」的想像裡;如果 29 天後我只多了 30 篇介紹文章,卻沒有留下一個經過正式訓練、能重新載入並接受同一套評估的模型,那就有點可惜了。
所以,後面的文章會保留每一次可重跑的設定、實際輸出、失敗案例和成本,我們也會先凍結 baseline,再進行 SFT、RLVR/micro-GRPO 與 distillation,最後把訓練後模型放回相同的 held-out 評估裡比較。我當然希望模型最後會變好,不然花了這麼多時間和算力未免太悲傷,但如果結果就是沒有贏過 Base,那也只能照原樣寫出來;至少我們會知道問題可能出在資料、訓練方法、候選選擇,或者一開始就把這顆 0.6B 小模型想得太厲害,而不是只留下一張下降得很漂亮的 training-loss 曲線,假裝事情已經完成。
LLM 的確逐 token 生成文字,但如今我們今天稱為 reasoning model 的東西,通常仍然是 LLM,只是在它上面加入不同的後訓練方法、更多推論時運算、工具調用以及形式化驗證器,它們早已不是隨機鸚鵡。
如果想沿著原書往下讀,可以先看 Sebastian Raschka 的 companion hub 和官方程式碼倉庫,本系列使用的起始模型與授權資訊則是 Qwen3-0.6B-Base model card。